// 提供简化编写并发和异步代码的工作的类型
using System.Threading.Tasks;
// Linq表达式
using System.Linq;
// 用于定义泛型集合的接口和类，可允许用户创建强类型集合
using System.Collections.Generic;

namespace MyApi.Repository
{
    public interface IRepository<T>
    {
        // 提供针对特定数据源（其中数据类型未知）评估查询的功能
        IQueryable<T> Table { get; }

        // 根据Id获取指定实体
        T GetById(int id);

        // 使用实体对象，插入数据
        void Insert(T entity);

        // 使用实体对象，插入数据（多线程异步）
        Task InsertAsync(T entity);

        // 批量插入多条数据
        void InsertBulk(IEnumerable<T> entities);

        // 批量插入多条数据（多线程异步）
        Task InsertBulkAsync(IEnumerable<T> entities);

        // 使用实体对象，更新数据
        void Update(T entity);

        // 使用实体对象，批量更新数据
        void UpdateBulk(IEnumerable<T> entities);

        //  根据Id删除指定实体
        void Delete(int id);
    }
}